// 将axios二次封装 定义默认配置 以及添加拦截器 所有请求都通过封装的方法来请求
import axios from 'axios'
import qs from 'qs'
import { getToken } from '_utils' 
import  { Toast } from 'vant';
import router from '../router'
 import Vue from 'vue'
const vm = new Vue()  //用构造函数也可以
// 定义请求默认配置
const request = axios.create({
  baseURL: '/conner' // 定义源
})
// 添加拦截器 ctrl+cv
request.interceptors.request.use(function (config) {
  // 处理post请求参数 json格式问题
  /*
    获取token,有 登录了 将token放到请求头中
    没有登录 请求头部部加
  */
 vm.$showLoading()     //调用全局方法是在loading中
    if (getToken()) {
      config.headers.token = getToken()
    }
  // 处理post请求参数 json格式问题
  if (config.method === 'post' && config.data) { // post请求才拦截  data有值 才处理
    config.data = qs.stringify(config.data)// 拦截之后重新赋值
  }
  return config
}, function (error) {
  vm.$hideLoading()
  return Promise.reject(error)
})

request.interceptors.response.use(function (res) {
  vm.$hideLoading()
   //判断token是否过期
   if(res.data.code===2000){
     //token过期
     Toast({
       type:'fail',
       duration:1000,
       message:'登录状态过期重新登陆',
       onClose:() => {
        //跳转登录页
        router.push('/login') //这是一个js文件 所以要先引入router在做他的实列
       }
     })
   }
  return res
}, function (error) {
  vm.$hideLoading()
  return Promise.reject(error)
})
export default request
